fix(terminal): map macOS Command+. to interrupt running command like Ctrl+C - #3409
Conversation
|
@codex review |
|
To use Codex here, create a Codex account and connect to github. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a0ef88c085
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 789a5ef2ec
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 671ce69519
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Netcatty/components/terminal/runtime/createXTermRuntime.ts
Lines 2116 to 2120 in c0ed0c3
When a Kitty release-reporting session already has the physical C key held, pressing Command+Period upserts the normalized interrupt under the same KeyC entry and replaces that outstanding press (the broadcast map has the same collision). The Period keyup then releases and deletes this shared entry while physical C is still down, and the eventual C keyup has no press to pair with, producing premature or modifier-mismatched releases in report-all TUIs. The new alias deletion only fixes a later stale Period keyup; it does not prevent this simultaneous identity collision, so the normalized press needs independently keyed/stacked bookkeeping.
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
With input broadcasting enabled, holding a physical C key and then pressing Command-period still collapses both presses on each peer because this dispatch sends only the normalized event whose code is KeyC; the new pressIdentity exists solely in the source-side maps, while resolveKittyKeyboardBroadcastInput() keys peer state from input.event.code. On a legacy peer the outstanding C entry can suppress the following urgent \x03 as duplicate, and on a Kitty peer the first release clears the shared pairing entry. Fresh evidence after the local alias fix is that no distinct correlation identity crosses this broadcast call, so it must be propagated and used by peer pairing.
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 15f209d24d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4291adbdfc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review Please review the current head |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a3abb8f979
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review All newly added comments and test titles now use ASCII. Non-Latin layout test values retain the same characters using Unicode escapes. The complete PR diff has zero non-ASCII added lines; 66 affected tests and lint pass. Please review the latest head. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b9f9dbea88
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review The live fixture now supplies resizeSession and supports raw broadcast data like TerminalLayer. It also collects renderer error messages and asserts none occurred. The complete real Electron test passes, including native Command-period stopping tail and a subsequent shell command. Please review the latest head. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8d60972fdd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
|
Codex Review: Didn't find any major issues. You're on a roll. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8d60972fdd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review Both layout findings are reproduced and fixed on the new head. Shift is accepted only when it produces the logical period; the physical fallback remains unshifted. Every normalized Command-period uses a dedicated identity and release alias, including when the original physical key is KeyC. All 67 affected tests pass; real Electron cases for both layouts, selected text, broadcasting, and native tail interruption pass with zero renderer errors. |
|
Codex Review: Didn't find any major issues. Keep it up! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Codex reported no major issues. This PR is marked ready for human review/merge. |
Summary
On macOS, Command-period now interrupts the connected terminal through the existing Ctrl+C path. It also works with broadcast terminals while preserving independent held keys and non-QWERTY keyboard layouts.
Type of Change
Related Issue (optional)
Closes #3408
Changes Made
tail -fprocess.Screenshots / Demo
On macOS, the native Electron Command-period input stopped
tail -f /dev/nullin a real/bin/shPTY. A subsequent command executed successfully. The shell test uses output markers absent from the echoed input to prevent false positives. No visual layout changes.Testing
node_modules/.bin/electron scripts/terminal-command-period.live.test.cjs); full appnpm run devwas not used.npm run lint); the new live test also passes expliciteslint --no-ignore.npm testrun locally: initial run passed 12,030, skipped 28, failed 31 because the isolated checkout lacked a nested plugin dependency and default concurrency caused timeouts. After restoring the dependency, all 282 tests in the failed files passed with concurrency limited to 2. No unrelated product code was changed.The same Electron regression against the previous PR head fails the non-QWERTY release assertion, and the selection case fails before the selection fix; it passes against this revision. Native Win32 encoding was exercised inside macOS Electron, not against a Windows host.
Checklist